package com.muh.service;

import com.muh.entity.User1;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 使用feign面向接口编程
 * 使用@FeignClient注解 引入 服务提供者的服务名（就不需要关心服务提供者的ip+端口了）
 */
@FeignClient(value ="PROVIDER-SERVER", fallbackFactory = CircuitBreakerFallbackFactory.class)
public interface FeignClientService {

    //调用 服务提供者 的方法 providerController/hello1
    @RequestMapping(value = "/providerController/hello1", method = RequestMethod.GET)
    String hello1();

//
//    //调用 服务提供者 的方法 user1/{id}
//    @RequestMapping(value = "/user1/{id}", method = RequestMethod.GET)
//    ResponseEntity<Page<User1>> queryByPage(@RequestParam(name = "id") User1 user1, PageRequest pageRequest);

    //调用 服务提供者 的方法 user1/{id}
    @RequestMapping(value = "/user1/{id}", method = RequestMethod.GET)
    User1 getUserById(@RequestParam(name = "id") Integer id);

    //调用 服务提供者 的方法 user1/getUserByName
    @RequestMapping(value = "/user1/getUserByName", method = RequestMethod.GET)
    List<User1> getUserByName(@RequestParam(name = "name")String name);

    //调用 服务提供者 的方法 user1/insert
    @RequestMapping(value = "/user1/insert", method = RequestMethod.POST)
    int insert(User1 user1);

    //调用 服务提供者 的方法 user1/insertBatch
    @RequestMapping(value = "/user1/insertBatch", method = RequestMethod.POST)
    int insertBatch(List<User1> user1List);

    //调用 服务提供者 的方法 user1/deleteById
    @RequestMapping(value = "/user1/deleteById", method = RequestMethod.GET)
    boolean deleteById(@RequestParam(name = "id") Integer id);

    //调用 服务提供者 的方法 user1/update
    @RequestMapping(value = "/user1/update", method = RequestMethod.PUT)
    User1 update(User1 user1);

    //调用 服务提供者 的方法 user1/update
    @RequestMapping(value = "/user1/insertOrUpdateBatch", method = RequestMethod.POST)
    int insertOrUpdateBatch(List<User1> user1List);


    //调用 服务提供者 的方法 circuitBreakerController/getUserByName
    @RequestMapping(value = "/circuitBreakerController/getUserByName", method = RequestMethod.GET)
    List<User1> getUserByNameWithCircuitBreaker(@RequestParam(name = "name")String name);

}
